//lp_norm_v2_custom_tiling.h

#ifndef LP_NORM_V2_CUSTOM_TILING_H
#define LP_NORM_V2_CUSTOM_TILING_H
#include <cstdint>

struct LpNormV2CustomTilingData {
    uint32_t totalLength;       // 输入数据的总长度
    uint32_t dataType;          // 数据类型

    uint32_t blockLength;       // 每个 block 的数据长度
    uint32_t tileNum;           // 每个 block 划分的 tile 数
    uint32_t tileLength;        // 每个 tile 的长度
    uint32_t lastTileLength;    // 最后一个 tile 的长度

    uint32_t formerNum;         // 前段（可能对齐部分）的 block 数
    uint32_t formerLength;      // 前段的总长度
    uint32_t formerTileNum;     // 前段的 tile 数
    uint32_t formerTileLength;  // 前段每个 tile 的长度
    uint32_t formerLastTileLength; // 前段最后一个 tile 的长度

    uint32_t tailNum;           // 尾段（非对齐部分）的 block 数
    uint32_t tailLength;        // 尾段的总长度
    uint32_t tailTileNum;       // 尾段的 tile 数
    uint32_t tailTileLength;    // 尾段每个 tile 的长度
    uint32_t tailLastTileLength;// 尾段最后一个 tile 的长度

    uint32_t isEvenCore;        // 是否均匀分配到各个 core

    float pValue;               // 范数的 p 值（L1/L2/Lp）
    uint32_t axis;              // 0：整体矩阵 1：列向量 2：行向量
    uint32_t cols;              // 矩阵列数
    uint32_t rows;              // 矩阵行数
    float epsilon;              // 防止除 0
};
#endif